package edu.utn.tacs.grupouno.dao.implementations;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.stereotype.Repository;

import edu.utn.tacs.grupouno.dao.AbstractTurnoContainer;
import edu.utn.tacs.grupouno.negocio.Dia;
import edu.utn.tacs.grupouno.negocio.Turno;
import edu.utn.tacs.grupouno.negocio.TurnoSemanal;

@Repository
public class EnMemoriaTurnoContainer extends AbstractTurnoContainer {

	private Map<Date,List<Turno>> turnosAsignados;
	private Set<TurnoSemanal> turnosSemanales;
	
	public EnMemoriaTurnoContainer() {
		turnosAsignados = new HashMap<Date, List<Turno>>();
		turnosSemanales = new HashSet<TurnoSemanal>();
	}
	
	@Override
	public void addTurnoAsignado(Date date, Turno turno) {
		Date fecha = Dia.clean(date);
		List<Turno> turnos = turnosAsignados.get(fecha);
		if(turnos == null) {
			turnos = new ArrayList<Turno>();
			turnosAsignados.put(fecha, turnos);
		}
		turnos.add(turno);
	}

//	@Override
//	public List<Turno> getTurnosByDia(Dia dia) {
//		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//		Date date = dia.getFecha();
//		DiaDeLaSemana dsem = Dia.DiaDeLaSemana.get(date);
//		Map<String, Turno> mapaTurnos = new HashMap<String, Turno>();
//		for(TurnoSemanal tsem : turnosSemanales) {
//			if(tsem.getDiaDeLaSemana().equals(dsem) &&
//					tsem.getFechaInicio().compareTo(date) <= 0) {
//				Turno turnoDisponible = context.getBean("turnoDisponible", Turno.class);
//				turnoDisponible.setTurnoSemanal(tsem);
//				mapaTurnos.put(tsem.getHorario(), turnoDisponible);
//			}
//		}
//
//		List<Turno> turnosAsignadosEnDia = turnosAsignados.get(date);
//		if(turnosAsignadosEnDia != null) {
//			for(Turno turno : turnosAsignadosEnDia) {
//				mapaTurnos.put(turno.getTurnoSemanal().getHorario(), turno);
//			}
//		}
//		return new ArrayList<Turno>(mapaTurnos.values());
//	}


	@Override
	public List<Turno> getTurnosAsignadosByDia(Date date) {
		return turnosAsignados.get(date);
	}

	@Override
	public List<TurnoSemanal> getTurnosSemanalesDesde(Date date) {
		List<TurnoSemanal> retval = new ArrayList<TurnoSemanal>();
		Dia.DiaDeLaSemana dsem = Dia.DiaDeLaSemana.get(date);
		for(TurnoSemanal tsem : turnosSemanales) {
			if(tsem.getDiaDeLaSemana().equals(dsem) &&
					tsem.getFechaInicio().compareTo(date) <= 0) {
				retval.add(tsem);
			}
		}
		return retval;
	}

	
	@Override
	public void addTurnoSemanal(TurnoSemanal tsem) {
		turnosSemanales.add(tsem);
	}

	@Override
	public void liberarTurno(Date date, Turno turno) {
		turnosAsignados.get(date).remove(turno);
	}

}
